気象情報APIの OpenWeatherMap で「現在・1時間毎・1日毎」の天気予報を取得してみた

気象情報APIの OpenWeatherMap で「現在・1時間毎・1日毎」の天気予報を取得してみた

現在・1時間毎・1日毎の天気予報をAPIで取得してみました。
Clock Icon2020.06.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

天気予報で作りたいものを思いつきましたが、「そもそも天気予報ってAPIでどう取得するんだろう?」となったので、実際に試してみました。

気象情報APIの選定

気象情報を扱うAPIはいくつかありますが、「個人でもOK・無料の範囲・1時間毎のデータを取得できる」を満たすOpenWeatherMapを使ってみます。

OpenWeatherMapを使う

アカウント登録

OpenWeatherMapにアクセスしてサインアップします。

APIキーを取得

ログイン後のメニューに表示されているAPI Keysを選択すると、APIキーが表示されています。

APIキーを取得する

APIを叩く準備をする

One Call APIを使います。各種条件は下記とします。

  • 場所: 東京駅
    • 緯度: 35.681236
    • 経度: 139.767125
  • 単位: 摂氏・メートル
  • 言語: 日本語

これらをもとにAPIのクエリ文字列を作りました。

curl "https://api.openweathermap.org/data/2.5/onecall?lat=35.681236&lon=139.767125&units=metric&lang=ja&appid={YOUR API KEY}"

なお、APIキーの取得直後は「Invalid API key」と401エラーになりますが、数時間ほど待てばOKです。

レスポンス内容を確認する

実際のレスポンスは大量にあるため省略します。(見やすく整形して約1300行)

全体構造

構造としては下記となっており、currenthourlydailyのデータがバッチリあります。One Call APIのドキュメント通りですね。

{
  "lat": 35.68,
  "lon": 139.77,
  "timezone": "Asia/Tokyo",
  "timezone_offset": 32400,
  "current": {
    ...(略)...
  },
  "hourly": [
    {
      ...(略)...
    },
    ...(略)...
    {
      ...(略)...
    }
  ],
  "daily": [
    {
      ...(略)...
    },
    ...(略)...
    {
      ...(略)...
    }
  ]
}

hourlyの1要素を抜粋すると下記です。

{
  "dt": 1591866000,
  "temp": 24.02,
  "feels_like": 20.91,
  "pressure": 1004,
  "humidity": 88,
  "dew_point": 21.91,
  "clouds": 75,
  "wind_speed": 11.09,
  "wind_deg": 203,
  "weather": [
    {
      "id": 501,
      "main": "Rain",
      "description": "適度な雨",
      "icon": "10d"
    }
  ],
  "rain": {
    "1h": 1.52
  }
}

使いそう&面白そうな値

  • 時刻: dt
  • 温度: temp
  • 体感温度: feels_like
  • 気圧: pressure
  • 湿度: humidity
  • UV指数: uvi
  • 風速: wind_speed
  • 気象情報: weather.main
  • 気象情報の詳細: weather.description
  • 気象情報のアイコンID: weather.icon
  • 降水量: rain.1h
  • 積雪量: snow.1h

公式ドキュメントのアイコンIDを参照すれば、対応したアイコン(画像)が分かります。

さいごに

次はこの情報を活用してみたいと思います!

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.